package br.com.iswe.gerador.ant;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import org.apache.tools.ant.Task;

@SuppressWarnings("unchecked")
public class Entidade extends Task {

	private Vector<Entidade> entidades = new Vector<Entidade>();
	public void addEntidade(Entidade entidade){
		entidades.add(entidade);
		//Repassar a instancia da task do gerador para as entidades aninhadas.
		entidade.setGeradorTask(this.getGeradorTask());
	}
	
	private ISWEGeradorTask geradorTask = null; 
	
	
	public List<Class> getClasses(){
		List<Class> retorno = new ArrayList<Class>();
		try{
			if(entidades.size() > 0){
				for (Entidade filha : entidades) {
					if(filha.getPakage().length() > 0){
						filha.setPakage(pakage + "." + filha.getPakage());
					}
					else{
						filha.setPakage(pakage);
					}
					retorno.addAll(filha.getClasses());
				}
			}
			else{
				String classFullName = pakage + "." + className;
				System.out.println("Tentando Carregar : " + classFullName);
				retorno.add(getGeradorTask().getClassLoader().loadClass(classFullName));
			}
		}
		catch(Exception exp){
			exp.printStackTrace();
		}
		System.out.println("Numero de Classes Carregadas : " + retorno.size());
		return retorno;
	}
	
	private String pakage = "";
	private String className = "";
	
	public String getPakage() {
		return pakage;
	}
	public void setPakage(String pakage) {
		this.pakage = pakage;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}
	public ISWEGeradorTask getGeradorTask() {
		return geradorTask;
	}
	public void setGeradorTask(ISWEGeradorTask geradorTask) {
		this.geradorTask = geradorTask;
	}
	
}
